package com.example.music;


import static java.lang.Integer.parseInt;

import android.animation.ObjectAnimator;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.media.MediaPlayer;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.animation.LinearInterpolator;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.TextView;

import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;

public class MusicActivity extends AppCompatActivity implements View.OnClickListener{
//    @SuppressLint("StaticFieldLeak")
    private static SeekBar sb;
    private static TextView tv_progress,tv_total,name_song;
    private ObjectAnimator animator;
    private MusicService.MusicControl musicControl;
    String name;
    private static Button play;
    Intent intent1,intent2;
    MyServiceConn conn;
    private boolean isUnbind =false;//记录服务是否被解绑

//    private String formatTime(int length){
//        Date date = new Date(length);
//        SimpleDateFormat sdf = new SimpleDateFormat("mm:ss");
//        String totalTime = sdf.format(date);
//        return totalTime;
//    }




    //实例化一个MyHandler对象
//    public Handler handler = new MyHandler(this);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_music);
        intent1=getIntent();
//        Log.e("TAG", "intent1" + intent1 );
        init();
//        ActionBar actionBar = getSupportActionBar();
//        if(actionBar != null) {
//            actionBar.hide();
//        }
    }
    private void init(){
        tv_progress=(TextView)findViewById(R.id.tv_progress);
        tv_total=(TextView)findViewById(R.id.tv_total);
        sb=(SeekBar)findViewById(R.id.sb);
        name_song=(TextView)findViewById(R.id.tv_user_login_14);
        play=(Button)findViewById(R.id.bn_user_1);
        findViewById(R.id.bn_user_1).setOnClickListener(this);
        findViewById(R.id.bn_user_4).setOnClickListener(this);

        name=intent1.getStringExtra("name");
        name_song.setText(name);

        intent2=new Intent(this,MusicService.class);//创建意图对象
        conn=new MyServiceConn();//创建服务连接对象
        bindService(intent2,conn,BIND_AUTO_CREATE);//绑定服务
        //为滑动条添加事件监听

        sb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
            @RequiresApi(api = Build.VERSION_CODES.KITKAT)
            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
                //进度条改变时，会调用此方法
                if (progress==seekBar.getMax()){//当滑动条到末端时，结束动画
                    animator.pause();//停止播放动画
                }
            }
            //滑动条开始滑动时调用
            @Override
            public void onStartTrackingTouch(SeekBar seekBar) {//滑动条开始滑动时调用
            }
            //滑动条停止滑动时调用
            @Override
            public void onStopTrackingTouch(SeekBar seekBar) {//滑动条停止滑动时调用
                //根据拖动的进度改变音乐播放进度
                int progress=seekBar.getProgress();//获取seekBar的进度
//                Log.e("TAG", "progress: "+progress);
                musicControl.seekTo(progress);//改变播放进度
            }
        });


        ImageView iv_music=(ImageView)findViewById(R.id.iv_user_pc3);
        String position= intent1.getStringExtra("position");
//        Log.e("TAG", "position:" + position );
        int i=parseInt(position);
//        int i = 1;
        iv_music.setImageResource();
        animator=ObjectAnimator.ofFloat(iv_music,"rotation",0f,360.0f);
        animator.setDuration(10000);//动画旋转一周的时间为10秒
        animator.setInterpolator(new LinearInterpolator());//匀速
        animator.setRepeatCount(-1);//-1表示设置动画无限循环
    }

//    static class MyHandler extends Handler {
//
//       private static final String TAG = "1";//创建消息处理器对象
//        //注意下面的LoginActivity类是MyHandler类所在的外部类，即所在的Activity
//        WeakReference<MusicActivity> MusicActivityWeakReference;
//
//        MyHandler(MusicActivity musicActivity) {
//            MusicActivityWeakReference = new WeakReference<>(musicActivity);
//        }
//
//
//
//        //在主线程中处理从子线程发送过来的消息
//        public  void handleMessage(Message msg){
//
//            Bundle bundle=msg.getData();//获取从子线程发送过来的音乐播放进度
//            int duration=bundle.getInt("duration");
//            Log.e(TAG, "handleMessage: "+duration);
//            int currentPosition=bundle.getInt("currentPosition");
//            sb.setMax(duration);
//            sb.setProgress(currentPosition);
//            //歌曲总时长
//            int minute=duration/1000/60;
//            int second=duration/1000%60;
//            String strMinute=null;
//            String strSecond=null;
//            if(minute<10){//如果歌曲的时间中的分钟小于10
//                strMinute="0"+minute;//在分钟的前面加一个0
//            }else{
//                strMinute=minute+"";
//            }
//            if (second<10){//如果歌曲中的秒钟小于10
//                strSecond="0"+second;//在秒钟前面加一个0
//            }else{
//                strSecond=second+"";
//            }
//            tv_total.setText(strMinute+":"+strSecond);
//            //歌曲当前播放时长
//            minute=currentPosition/1000/60;
//            second=currentPosition/1000%60;
//            if(minute<10){//如果歌曲的时间中的分钟小于10
//                strMinute="0"+minute;//在分钟的前面加一个0
//            }else{
//                strMinute=minute+" ";
//            }
//            if (second<10){//如果歌曲中的秒钟小于10
//                strSecond="0"+second;//在秒钟前面加一个0
//            }else{
//                strSecond=second+" ";
//            }
//            tv_progress.setText(strMinute+":"+strSecond);
//
//        }
//    };
//handler机制，可以理解为线程间的通信，我获取到一个信息，然后把这个信息告诉你，就这么简单
public static Handler handler=new Handler(){
    //创建消息处理器对象
    //在主线程中处理从子线程发送过来的消息
    @Override
    public void handleMessage(Message msg){

        Bundle bundle=msg.getData();//获取从子线程发送过来的音乐播放进度
        //获取当前进度currentPosition和总时长duration
        int duration=bundle.getInt("duration");
        int currentPosition=bundle.getInt("currentPosition");
        //对进度条进行设置
        sb.setMax(duration);
        sb.setProgress(currentPosition);
        //歌曲是多少分钟多少秒钟
        int minute=duration/1000/60;
        int second=duration/1000%60;
        String strMinute=null;
        String strSecond=null;
        if(minute<10){
            //如果歌曲的时间中的分钟小于10
            strMinute="0"+minute;//在分钟的前面加一个0
        }else{

            strMinute=minute+"";
        }
        if (second<10){
            //如果歌曲中的秒钟小于10
            strSecond="0"+second;//在秒钟前面加一个0
        }else{

            strSecond=second+"";
        }
        //这里就显示了歌曲总时长
        tv_total.setText(strMinute+":"+strSecond);
        //歌曲当前播放时长
        minute=currentPosition/1000/60;
        second=currentPosition/1000%60;
        if(minute<10){
            //如果歌曲的时间中的分钟小于10
            strMinute="0"+minute;//在分钟的前面加一个0
        }else{

            strMinute=minute+" ";
        }
        if (second<10){
            //如果歌曲中的秒钟小于10
            strSecond="0"+second;//在秒钟前面加一个0
        }else{

            strSecond=second+" ";
        }
        //显示当前歌曲已经播放的时间
        tv_progress.setText(strMinute+":"+strSecond);
    }
};
    class MyServiceConn implements ServiceConnection{//用于实现连接服务
        @Override
        public void onServiceConnected(ComponentName name, IBinder service){
            musicControl=(MusicService.MusicControl) service;
        }
        @Override
        public void onServiceDisconnected(ComponentName name){

        }
    }
    private void unbind(boolean isUnbind){
        if(!isUnbind){//判断服务是否被解绑
            musicControl.pausePlay();//暂停播放音乐
            unbindService(conn);//解绑服务
        }
    }
    @RequiresApi(api = Build.VERSION_CODES.KITKAT)
    @Override
    public void onClick(View v) {
        MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.music_0);


        switch (v.getId()){

            case R.id.bn_user_1://播放按钮点击事件
                if (!mediaPlayer.isPlaying()) {
                    play.setBackgroundResource(R.drawable.ic_ab_start);
                    String position=intent1.getStringExtra("position");
                    int i=parseInt(position);
                    musicControl.play(i);
                    animator.start();
                } else {//暂停
                    play.setBackgroundResource(R.drawable.ic_ab_pause);
                    mediaPlayer.pause();
                    animator.pause();
                }
                break;

            case R.id.bn_user_4://退出按钮点击事件
                unbind(isUnbind);
                isUnbind=true;
                mediaPlayer.pause();
                animator.pause();
                finish();
                break;

        }
    }



    @Override
    protected void onDestroy(){
        super.onDestroy();
        unbind(isUnbind);//解绑服务
    }
}

